/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package interprete;

/**
 *
 * @author lynx
 */
class Arreglo {
    
    private final int dimensiones;
    private final int[] dimensión;
    private final int tamaño;
    private Casilla[] arreglo;

    Arreglo(int[] dimensión) {
        this.dimensión = dimensión;
        dimensiones = dimensión.length;
        tamaño = tamaño(dimensión);
        arreglo = new Casilla[tamaño];
    }
    
    private int tamaño(int[] dimension){
        int tamaño = dimensión[0];
        for(int i=1; i<dimensiones; i++){
            tamaño*=dimensión[i];
        }
        return tamaño;
    }
    
    private int posición(int[] posición){
        int pos = 0;
        for(int i=0; i<posición.length; i++){
            int factor = 1;
            for(int j=0; j<i; j++){
                factor*=dimensión[i];
            }
            pos+=factor*posición[i];
        }
        return pos;
    }
    
    void ponValor(int[] posición, double valor) throws Exception{
        if(posición.length==dimensiones && tamaño(dimensión)<=tamaño){
            arreglo[posición(posición)].valor(valor);
        }else{
            throw new Exception("Dimensiones incorrectas");
        }
    }
    
    Casilla obtenValor(int[] posición) throws Exception{
        if(posición.length==dimensiones && tamaño(dimensión)<=tamaño){
            return arreglo[posición(posición)];
        }else{
            throw new Exception("Dimensiones incorrectas");
        }
    }    
    
}
